package org.supda.system.service;

import java.util.List;
import java.util.Set;

import org.supda.system.entity.TResources;
import org.supda.system.entity.TRole;
import org.supda.system.entity.TUser;
import org.supda.system.util.DataTablePageUtil;
import org.supda.system.util.PageUtil;

public interface UserService {

	/**
	 * 查询出所有用户
	 * @return
	 */
	List<TUser> listUsers();
	
	/**
	 * 根据用户Id查询用户信息
	 * @param id
	 * @return
	 */
	TUser findById(Long id);
	
	/**
	 * 根据用户名查询出所有的用户信息
	 * @param userName
	 * @return
	 */
	List<TUser> findByAccountName(String accountName);
	
	/**
	 * 根据用户名查找用户
	 * @param username
	 * @return
	 */
	TUser findByUsername(String accountName);
	
	/**
	 * 根据用户名查找角色
	 * @param username
	 * @return
	 */
	Set<TRole> findRoles(String accountName);

	/**
	 * 根据用户名查询出其所有权限信息
	 * @param username
	 * @return
	 */
	Set<TResources> findResources(String accountName);
	
	/**
	 * 创建账户
	 * @param user
	 * @return
	 */
	TUser createUser(TUser user);
	
	/**
	 * 修改密码
	 * @param userId
	 * @param newPassword
	 */
	void changePassword(Long userId , String newPassword);
	
	/**
	 * 添加用户-角色关系
	 * @param userId
	 * @param roleIds
	 */
	void correlationRoles(Long userId , Long... roleIds);
	
	/**
	 * 移除用户-角色关系
	 * @param userId
	 * @param roleIds
	 */
	void unCorrelationRoles(Long userId, Long... roleIds);
	
	/**
	 * 
	 * @param id
	 * @param roleIds
	 */
	void updateCorrelationRoles(Long id , Long ...roleIds);

	/**
	 * 分页查询
	 * @param page
	 * @return
	 */
	PageUtil listByPage(PageUtil page, TUser user);

	/**
	 * DataTables分页
	 * @param dtp
	 */
	void listByDataTable(DataTablePageUtil<TUser> dtp);

	/**
	 * 根据用户名和menuId查询出资源信息
	 * @param accountName
	 * @param menuId
	 * @return
	 */
	Set<TResources> findResources(String accountName, Long menuId);

	/**
	 * 用户锁定-解锁
	 * @param id
	 * @return
	 */
	String locked(Long id);

	/**
	 * 删除用户
	 * @param id
	 */
	String delete(Long id);

	/**
	 * 更新用户
	 * @param user
	 */
	void update(TUser user , Long[] roleIds);
	
}










